#ifndef BUFFER_H_
#define BUFFER_H_

#include <stdio.h> 
#include <stdlib.h>
#include <vector> 
#include "../exceptions/IllegalOperation.h"
#include "../exceptions/MemoryStorageException.h"
#include "../exceptions/NullPointerException.h"
/**
 * 
 * Esta clase es un singleton
 * 
 * Existe un unico buffer
 * 
 * 
 * */
class Buffer {

private:
	unsigned int tamanio;
	void *pointer;
	unsigned int offset; // ver si es necesario
	
	vector<unsigned int>* ListEspaciosLibres;

	Buffer();
	static Buffer *instancia;
	
public:
	
	
	virtual ~Buffer();
		
	static Buffer* getInstance();	
		
	unsigned int getTamanio();
	
	/***
	 * solo una vez al comenzar la ejecucion, no permiteo redimensionarlo.
	 *  
	 */
	void setTamanio(unsigned int tam);
	
	void* getPointer();
	
	vector<unsigned int>* getListEspaciosLibres();
	
	static const unsigned int tamanioBloque = 128; 
	
};

#endif /* BUFFER_H_ */
